home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Arashi 1.1.1 / source code / For your think c folder / VA Kit ƒ / VARectZoom.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-09  |  2.9 KB  |  169 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: VARectZoom.c
  3.      Major release: Version 1.1d2, 9/5/95
  4.  
  5.      Last modification: Wednesday, September 9, 1992, 21:42
  6.      Created: Tuesday, February 19, 1991, 21:58
  7.  
  8.      Copyright © 1991-1992, Juri Munkki
  9. /*/
  10.  
  11. #include "VA.h"
  12. #include "STORM.h"
  13.  
  14. #define    ZOOMSTEPS    32
  15. #define    MAPPINGS    5
  16.  
  17. int        RectMappings[][4]={ 
  18.                     {    1,2,3,0    },
  19.                     {    3,0,1,2    },
  20.                     {    2,3,0,1    },
  21.                     {    2,1,0,3    },
  22.                     {    0,3,2,1    }};
  23.  
  24. Point    FromPoints[4];
  25. Point    MidPoints[4];
  26. Point    ToPoints[4];
  27. int        *CurrentMapping;
  28. long    Phaze;
  29.  
  30. void    DrawZoom()
  31. {
  32.     register    int        i,sizfactor;
  33.     register    Point    *Mid,*To;
  34.     
  35.     if(Phaze>0)
  36.     {    Phaze--;
  37.         Mid=MidPoints;
  38.         To=ToPoints;
  39.         for(i=0;i<4;i++)
  40.         {    Mid->h = To->h + (Phaze * (FromPoints[CurrentMapping[i]].h - To->h)) / ZOOMSTEPS;
  41.             Mid->v = To->v + (Phaze * (FromPoints[CurrentMapping[i]].v - To->v)) / ZOOMSTEPS;
  42.             Mid++;
  43.             To++;
  44.         }
  45.         
  46.     }
  47.  
  48. #define    JITTERTIME    6
  49.     if(Phaze>JITTERTIME && Phaze<ZOOMSTEPS-JITTERTIME)
  50.     {    VAMoveTo(MidPoints[3].h,MidPoints[3].v);
  51.         Mid=MidPoints;
  52.         for(i=0;i<4;i++)
  53.         {    VASafeLineTo(Mid->h,Mid->v);
  54.             Mid++;
  55.         }
  56.     }
  57.     else
  58.     {    if(Phaze>=ZOOMSTEPS-JITTERTIME)
  59.             sizfactor=ZOOMSTEPS-Phaze;
  60.         else
  61.             sizfactor=Phaze;
  62.         sizfactor+=6;
  63.         Mid=MidPoints;
  64.         for(i=0;i<4;i++)
  65.         {    VAFractalLine(Mid->h,Mid->v,MidPoints[(i+1)&3].h,MidPoints[(i+1)&3].v,1<<sizfactor,5);
  66.             Mid++;
  67.         }
  68.     }
  69.     if(Phaze==0)
  70.     {    PlayA(PhazerOut,0);
  71.         PlayB(PhazerOut,0);
  72.     }
  73. }
  74. void    NewZoomRect(r)
  75. register    Rect    *r;
  76. {
  77.                 Point    swapper;
  78.     register    Point    *dest;
  79.     register    int        i;
  80.     
  81.     for(i=0;i<4;i++)
  82.     {    FromPoints[i]=ToPoints[i];
  83.     }
  84.  
  85.     ToPoints[0].h=r->left;
  86.     ToPoints[1].h=r->left;
  87.     ToPoints[2].h=r->right;
  88.     ToPoints[3].h=r->right;
  89.  
  90.     ToPoints[0].v=r->top;
  91.     ToPoints[1].v=r->bottom;
  92.     ToPoints[2].v=r->bottom;
  93.     ToPoints[3].v=r->top;
  94.     
  95.     CurrentMapping=RectMappings[FastPosRandom() % MAPPINGS];
  96.     Phaze=ZOOMSTEPS+1;
  97. }
  98.  
  99. void    InitZoomRect(r)
  100. register    Rect    *r;
  101. {
  102.     register    int        i;
  103.  
  104.     FromPoints[0].h=r->left;
  105.     FromPoints[1].h=r->left;
  106.     FromPoints[2].h=r->right;
  107.     FromPoints[3].h=r->right;
  108.  
  109.     FromPoints[0].v=r->top;
  110.     FromPoints[1].v=r->bottom;
  111.     FromPoints[2].v=r->bottom;
  112.     FromPoints[3].v=r->top;
  113.     
  114.     for(i=0;i<4;i++)
  115.     {    ToPoints[i]=FromPoints[i];
  116.         MidPoints[i]=FromPoints[i];
  117.     }
  118.     
  119.     Phaze=0;
  120. }
  121.  
  122. #ifdef TEST_ZOOMRECT
  123. void    TestZoomRect()
  124. {
  125.     Rect    r;
  126.     int        oldspeed;
  127.     
  128.     VAInitFractalLines();
  129.  
  130.     oldspeed=VA.FrameSpeed;
  131.     VA.FrameSpeed=3;
  132.     SetRect(&r,10,10,300,200);
  133.     InitZoomRect(&r);
  134.     
  135.     VA.color=5;
  136.  
  137.     while(!Button())
  138.     {
  139.         r.right=(FastPosRandom() % VA.frame.right);
  140.         r.bottom=(FastPosRandom() % VA.frame.bottom);
  141.         r.left=(FastPosRandom() % (VA.frame.right-r.right));
  142.         r.top=(FastPosRandom() % (VA.frame.bottom-r.bottom));
  143.  
  144.         r.right+=r.left;
  145.         r.bottom+=r.top;
  146.         NewZoomRect(&r);
  147.         
  148.         while(Phaze)
  149.         {
  150.             DrawZoom();
  151.             VAStep();
  152.         }
  153.         DrawZoom();
  154.         VAStep();
  155.     }
  156.  
  157.     r=VA.frame;
  158.     NewZoomRect(&r);
  159.     while(Phaze)
  160.     {    DrawZoom();
  161.         VAStep();
  162.     }
  163.     VA.FrameSpeed=oldspeed;
  164.     
  165.     PlayA(Blast,100);
  166.     PlayB(Blast,100);
  167.     VACloseFractalLines();
  168. }
  169. #endif